/*
package org.example.util;

import java.io.*;
import java.net.Socket;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

*/
/**
 * TSPL打印工具类
 * 支持通过网络或本地打印服务发送TSPL指令
 *//*

public class TSPLPrinter {
    
    private String printerName;
    private String printerIP;
    private int printerPort;
    
    // 构造函数 - 使用本地打印机名称
    public TSPLPrinter(String printerName) {
        this.printerName = printerName;
    }
    
    // 构造函数 - 使用网络打印机IP和端口
    public TSPLPrinter(String printerIP, int printerPort) {
        this.printerIP = printerIP;
        this.printerPort = printerPort;
    }
    
    */
/**
     * 通过本地打印服务发送TSPL指令
     *//*

    public boolean printByLocalService(String tsplCommand) {
        try {
            // 查找打印机
            PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
            PrintService targetPrintService = null;
            
            for (PrintService service : printServices) {
                if (service.getName().contains(printerName)) {
                    targetPrintService = service;
                    break;
                }
            }
            
            if (targetPrintService == null) {
                System.err.println("找不到打印机: " + printerName);
                return false;
            }
            
            // 创建打印作业
            DocPrintJob printJob = targetPrintService.createPrintJob();
            
            // 创建文档
            byte[] data = tsplCommand.getBytes("UTF-8");
            DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
            Doc doc = new SimpleDoc(data, flavor, null);
            
            // 打印属性
            PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
            
            // 执行打印
            printJob.print(doc, attributes);
            
            System.out.println("打印成功发送到: " + targetPrintService.getName());
            return true;
            
        } catch (Exception e) {
            System.err.println("打印失败: " + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
    
    */
/**
     * 通过网络直接发送TSPL指令到打印机
     *//*

    public boolean printByNetwork(String tsplCommand) {
        try (Socket socket = new Socket(printerIP, printerPort);
             OutputStream out = socket.getOutputStream()) {
            
            // 发送TSPL指令
            out.write(tsplCommand.getBytes("UTF-8"));
            out.flush();
            
            System.out.println("TSPL指令已发送到: " + printerIP + ":" + printerPort);
            return true;
            
        } catch (Exception e) {
            System.err.println("网络打印失败: " + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
    
    */
/**
     * 生成Hello World的TSPL指令
     *//*

    public static String createHelloWorldTSPL() {
        StringBuilder tspl = new StringBuilder();
        
        // TSPL指令
        tspl.append("SIZE 100 mm, 80 mm\n");           // 设置标签尺寸
        tspl.append("GAP 2 mm, 0 mm\n");              // 设置标签间隙
        tspl.append("DIRECTION 1,0\n");                // 设置打印方向
        tspl.append("REFERENCE 0,0\n");                // 设置参考点
        tspl.append("OFFSET 0 mm\n");                  // 设置偏移
        tspl.append("SET PEEL OFF\n");                 // 设置撕纸模式
        tspl.append("SET CUTTER OFF\n");               // 关闭切纸
        tspl.append("SET PARTIAL_CUTTER OFF\n");       // 关闭半切
        tspl.append("SET TEAR ON\n");                  // 开启撕纸线
        tspl.append("CLS\n");                          // 清除缓存
        
        // 添加文本内容
        tspl.append("TEXT 50,100,\"3\",0,1,1,\"Hello World!\"\n");  // 打印文本
        tspl.append("TEXT 50,150,\"3\",0,1,1,\"你好，世界！\"\n");     // 中文文本
        tspl.append("TEXT 50,200,\"2\",0,2,2,\"TSPL Print Test\"\n"); // 大号字体
        
        // 添加边框
        tspl.append("BOX 20,50,380,300,3\n");          // 绘制边框
        
        // 添加条形码
        tspl.append("BARCODE 50,250,\"128\",80,1,0,2,2,\"123456789\"\n");
        
        tspl.append("PRINT 1,1\n");                    // 打印1份
        
        return tspl.toString();
    }
    
    */
/**
     * 列出所有可用的打印机
     *//*

    public static void listAvailablePrinters() {
        System.out.println("可用的打印机列表:");
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        
        for (int i = 0; i < printServices.length; i++) {
            System.out.println((i + 1) + ". " + printServices[i].getName());
        }
    }
    
    // 主函数示例
    public static void main(String[] args) {
        System.out.println("=== TSPL打印工具 Hello World示例 ===\n");
        
        // 列出可用打印机
        listAvailablePrinters();
        System.out.println();
        
        // 生成Hello World TSPL指令
        String tsplCommand = createHelloWorldTSPL();
        System.out.println("生成的TSPL指令:");
        System.out.println(tsplCommand);
        System.out.println();
        
        // 方式1: 使用本地打印服务
        // 注意：需要将"YourPrinterName"替换为实际的打印机名称
        TSPLPrinter localPrinter = new TSPLPrinter("HPRT N31C"); // 或者你的具体打印机名称
        System.out.println("尝试通过本地打印服务打印...");
        boolean success1 = localPrinter.printByLocalService(tsplCommand);
        
        // 方式2: 使用网络打印（如果你的打印机支持网络连接）
        // TSPLPrinter networkPrinter = new TSPLPrinter("192.168.1.100", 9100);
        // System.out.println("尝试通过网络打印...");
        // boolean success2 = networkPrinter.printByNetwork(tsplCommand);
        
        if (success1) {
            System.out.println("\n打印任务已成功提交！");
        } else {
            System.out.println("\n打印失败，请检查:");
            System.out.println("1. 打印机是否已连接并开机");
            System.out.println("2. 打印机驱动是否正确安装");
            System.out.println("3. 打印机名称是否正确");
        }
    }
}

*/
/**
 * 使用说明：
 * 
 * 1. 本地打印方式：
 *    - 确保打印机已正确安装驱动并在系统中可见
 *    - 将代码中的"TSC"替换为你实际的打印机名称
 *    - 运行程序，它会通过Java Print Service发送TSPL指令
 * 
 * 2. 网络打印方式：
 *    - 确保打印机连接到网络并支持Raw TCP打印（通常是9100端口）
 *    - 取消main方法中网络打印部分的注释
 *    - 修改IP地址为你的打印机IP
 * 
 * 3. TSPL指令说明：
 *    - SIZE: 设置标签尺寸
 *    - TEXT: 添加文本，参数为(x,y,字体,旋转,x倍率,y倍率,内容)
 *    - BOX: 绘制矩形边框
 *    - BARCODE: 添加条形码
 *    - PRINT: 执行打印
 * 
 * 注意事项：
 * - 某些打印机可能需要特定的字符编码
 * - 坐标系统通常以点（dots）为单位，1mm约等于8点
 * - 建议先用小标签测试，避免浪费材料
 */
